package com.lry.util.String;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则工具
 * @author ALI
 * @date 2020-10-14 14:42
 */
public class PatternUtils {

    /**
     * 整数型 正则表达式
     */
    public static final String INTEGER_REGX = "[1-9]\\d+";
    /**
     * 字符型 正则表达式
     */
    public static final String STRING_REGX = "[^(\\d+)]";
    /**
     * double型 正则表达式
     */
    public static final String DOUBLE_REGX = "[1-9]\\d*(\\.[1-9]\\d*)";

    /**
     * 特殊字符正则表达式
     */
    public static final String SPECIAL_STRING_PATTERN = "[`~!@#$%^&*+=|{}':;',\\\\\\\\[\\\\\\\\].<>/?~！@#￥%……&*——+|{}【】‘；：”“’。，、？]";

    /**
     * 整数型正则
     */
    private static final Pattern INTEGER_PATTERN = Pattern.compile(INTEGER_REGX);

    /**
     * double型正则
     */
    private static final Pattern DOUBLE_PATTERN = Pattern.compile(DOUBLE_REGX);

    /**
     * string型正则
     */
    private static final Pattern STRING_PATTERN = Pattern.compile(STRING_REGX);

    private PatternUtils() {}

    /**
     * 判断字符串是否是int型
     * @param str 待匹配的文本
     * @return true：匹配成功
     */
    public static boolean isLong(String str) {
        return INTEGER_PATTERN.matcher(str).matches();
    }

    /**
     * 判断字符串是否是double型
     * @param str 待匹配的文本
     * @return true：匹配成功
     */
    public static boolean isDouble(String str) {
        return DOUBLE_PATTERN.matcher(str).matches();
    }

    /**
     * 判断字符串是否是字符型
     * @param str 待匹配的文本
     * @return true：匹配成功
     */
    public static boolean isString(String str) {
        return STRING_PATTERN.matcher(str).matches();
    }

    /**
     * 按传入的正则表达式匹配(完全匹配）
     * @param regx 正则表达式
     * @param text 待匹配的文本
     * @return true：匹配成功
     */
    public static boolean matcher(String regx, String text) {
        Pattern pattern = Pattern.compile(regx);
        Matcher matcher = pattern.matcher(text);
        return matcher.matches();
    }

    /**
     * 查找是否有匹配的字符（部分匹配即可）
     * @param regx 正则表达式
     * @param text 待匹配的文本
     * @return true：匹配成功
     */
    public static boolean find(String regx, String text) {
        Pattern pattern = Pattern.compile(regx);
        return pattern.matcher(text).find();
    }
}
